<script setup>
	import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
	import { cartApi } from './api/cart.js'
	import websocketClient from './utils/websocket.js'
	import storage from '@/utils/storage.js';
	import { checkAndRefreshToken } from './api/request.js';
	
	// 更新购物车角标
	const updateCartBadge = async () => {
		try {
			const res = await cartApi.getCartCount();
			if (res.code === 200 && res.data > 0) {
				// 购物车有商品，显示角标
				uni.setTabBarBadge({
					index: 2, // 购物车的tabBar索引
					text: String(res.data)
				});
			} else {
				// 购物车为空，移除角标
				uni.removeTabBarBadge({
					index: 2
				});
			}
		} catch (e) {
			console.error('获取购物车数量失败:', e);
		}
	}
	
	// 初始化WebSocket连接
	const initWebSocket = () => {
		// 只有登录用户才连接WebSocket
		if (storage.getToken()) {
			try {
				websocketClient.connect();
				
				// 设置自提通知回调
				websocketClient.onPickupReady((message) => {
					// 显示通知
					uni.showToast({
						title: '您有订单已准备好，可以前来自提',
						icon: 'none',
						duration: 3000
					});
				});
				
				// 设置定期检查WebSocket连接状态
				setInterval(() => {
					websocketClient.checkConnection();
				}, 30000); // 每30秒检查一次
			} catch (error) {
				console.error('WebSocket初始化失败:', error);
			}
		}
	}
	
	// 检查并刷新token
	const checkToken = async () => {
		if (storage.getToken()) {
			try {
				// 检查token是否即将过期，如果是则刷新
				const refreshed = await checkAndRefreshToken();
				console.log('Token检查结果:', refreshed ? '已刷新' : '无需刷新');
				
				// 如果token刷新了，重新连接WebSocket
				if (refreshed) {
					console.log('Token已刷新，重新连接WebSocket');
					websocketClient.disconnect();
					setTimeout(() => {
						initWebSocket();
					}, 500);
				}
			} catch (error) {
				console.error('Token检查失败:', error);
			}
		}
	}
	
	onLaunch(() => {
		console.log('App Launch')
		// 应用启动时检查token
		checkToken()
		// 应用启动时更新购物车角标
		updateCartBadge()
		// 初始化WebSocket
		initWebSocket()
		
		// 设置定期检查token
		setInterval(() => {
			checkToken();
		}, 5 * 60 * 1000); // 每5分钟检查一次token
	})
	
	onShow(() => {
		console.log('App Show')
		// 每次应用切换到前台时检查token
		checkToken()
		// 每次应用切换到前台时更新购物车角标
		updateCartBadge()
		// 重新连接WebSocket
		initWebSocket()
	})
	
	onHide(() => {
		console.log("App Hide");
		// 应用进入后台时断开WebSocket连接
		websocketClient.disconnect();
	})
</script>

<style>
	/*每个页面公共css */
</style>